【レポート】AWS Summit Tokyo 2017:Building a Serverless Data Lake on AWS Bootcamp #AWSSummit
DI部の川崎です。
ビッグデータ分析基盤の構築を担当する我々の部署にも、サーバーレスの大波がやって来ました。
という訳で、AWS Summit Tokyo 2017の「Building a Serverless Data Lake on AWS Bootcamp」を受講する機会がありましたので、その模様をお伝えします。
トレーニングの概要
「Building a Serverless Data Lake」は、AWS のサービスを使ってサーバーレスなデータレイクソリューションを設計、構築、および運用する方法を学習するブートキャンプです。
このブートキャンプでは、任意データソースからの大規模なデータの取り組み、永続的で安全なデータの保存、大量のデータを処理するための適切なツールの選択、およびほぼリアルタイムにデータを分析できるオプションといったトピックを取り扱います。
対象者
- ソリューションアーキテクト
- ビッグデータ基盤開発者
前提条件
- Amazon Elastic Compute Cloud (EC2) および Amazon Simple Storage Service (S3) を含む、AWS のコアサービスの知識
- プログラム言語またはスクリプト言語についてのある程度の知識
- Linux オペレーティングシステムおよびコマンドラインインターフェイスの操作
アジェンダ
- サーバーレスなデータレイクアーキテクチャを実現するため役に立つキーサービス
- メタデータインデックスの構築と検索機能の有効化
- 複数のデータソースからデータを大量に取り込むパイプラインのセットアップ
講習実施風景
参加者は25名ほどで、最初に簡単な自己紹介がありましたが、 普段、データ分析基盤の構築を担当されている方や、 データを活用したアプリの開発を担当されている方が多く参加されている印象でした。
演習環境は、会場のPCでも、持ち込みのノートPCでも、どちらでも好きな方で受講することができました。全部で5時間のコースでした。
講師
テクニカルトレーナー 鬼形 愛さん
テクニカルトレーナー 上原 誠さん
ミニディスカッション
ブートキャンプが始まりました。
講師の方、それから参加者の方の自己紹介があり、その後、スケジュールの案内がありました。
座学のスライドが始まる前に、まず3チームに分かれて、ミニディスカッションが行われました。
配布物として、AWSのアイコンセットが印刷された紙と、それをホワイトボードに貼り付けるためのテープが、各チームに配られました。
ディスカッションのお題は、Twitterデータを格納するためのデータレイクをセットアップし「データの取込」「検索」「分析」を行うソリューションのアーキテクチャを、サーバーレスの構成で考える、というものでした。
配布物の紙袋を開けてみると、サービスのアイコンが8種類も入ってました。これを全部使うのでしょうか?
各チームの考えたアーキテクチャ
チームBは、アイコンの貼り直しをしようとしたタイミングで、ディスカッション終了となってしまった、とのことでした。
受講内容
データレイク概要
サーバーレスとは?
- だれがサーバーを管理するか?
- あなたではない
- AWSがサーバーを管理する(マネージドサービス)
データレイクとは?
すぐに飲用できるようになったボトル入り飲料水がデータマートだとすると、データレイクはダムなどより自然な状態の⼤量の水全体」– James Dixon
従来の分析パイプラインとデータレイクのパイプラインの比較
- 従来はETLで加工処理したデータをDWHに保存
- データレイクでは、データレイクに保存されたデータを様々な用途で加工
データレイクに関連するコンポーネント
- 取り込み
- ストレージ
- カタログと検索
- 処理
- セキュリティ
取り込み、各種データ・タイプ
- ストリーミングデータ
- ログファイルデータ
- データベースデータ
ストレージ
- 高耐久性
- 高いスケーラビリティ
- 生データの保存
- あらゆるタイプのデータのサポート
- 低コスト
データのカタログ化とそれに対する検索機能
- メタデータ
- 分類
- シンプルなアクセスによる検索
- 内部ユーザー向け
- 外部ユーザー向け
- APIで公開
処理
- 変換
- 分析
- SQL
- 予備分析
- 機械学習
セキュリティ
- 暗号化
- 認証
- 許可
- 監査証跡
サーバーレスデータレイクのセットアップ
データレイクソリューションの3つの機能レイヤー
- 取り込み:Amazon Kinesis Firehose
- ストレージ:Amazon S3
- カタログと検索:Amazon DynamoDB、Amazon Elasticsearch Service、AWS Lambda
サンプルデータの準備
- 今回は、TwitterのサンプルデータをKinesis FirehoseにプッシュするPythonスクリプトをEC2で実行
Amazon Kinesis Firehose
- リアルタイムなストリーミングデータを自動ロードするための完全マネージド型サービス
- 60秒が経過する、もしくは5MB以上データがバッファに溜まるとS3に自動的に書き出す
Amazon Kinesis Firehose - Amazon S3部分
- Amazon S3バケットにストリーミングデータを配信するAmazon Kinesis Firehose配信ストリームを作成
AWS Lambda
- Lambda関数をデプロイ、S3バケットにデータオブジェクトが作成された時に、トリガーされる
- 今回は、Pythonでスクリプトを記述
Amazon DynamoDB
- メタデータカタログ用のDynamoDBテーブルをセットアップ、Lambda関数からオブジェクトメタデータを書き込む
Amazon Elasticsearch Service
- Amazon Elasticsearch Serviceをプロビジョニングし、メタデータカタログを対象にテキストベースの検索を実行できるようにする
テスト
- EC2のPythonスクリプトから、サンプルのTwitterデータをプッシュして、データが各コンポーネントを経由してElasticsearch Serviceドメインにパブリッシュされることをテスト
カタログ検索とデータロード
Amazon API Gateway
- データレイクにデータダウンロード用APIを構築
- Lambda関数と連携
- downloadリソースを定義
Amazon S3
- 静的ウェブサイトを構築、ユーザーインターフェイスをホスト
ウェブサイトを使用したカタログ操作とデータロード操作
- キーワードと日付範囲を指定し検索
- ブラウザに検索結果が表示される
- ロードするオブジェクトをチェック
- ロード先のS3バケットを指定
- 「Copy Data」をクリックすると、元データがS3バケットにコピーされる
Amazon EMRとAmazon Redshiftでデータを処理する
Amazon EMR
- ETLに利用可能なHadoopアプリケーション:Spark
- Sparkを利用したデータの変換
- 分析に利用可能なHadoopアプリケーション:Presto
- EMRクラスタを起動して、EMRクラスタのマスターノードにSSHで接続
- Sparkコマンドラインインターフェイスを使用、Spark-SQLクエリを発行
- EMR上で、データをJSON型式からParquet型式に変換、S3バケット内に外部テーブルを作成
- Prestoを使用してParquetテーブルにクエリを発行
Amazon Redshift
- Redshiftクラスタを起動、S3バケットからデータをロード
- psqlクライアントから、Redshiftに対してSQLクエリを発行
受講したメンバーの感想
川崎の感想
AWSではビッグデータを扱うためのサービスが数多く存在しますが、「サーバーレス」「データレイク」という切り口で、どのサービスをどのように組み合わせて使えばよいか、を知ることができたという点で有意義でした。
個人的には、ハンズオンを通して、普段自分では設定することがなかった、DynamoDBやKinesis Firehose、Elasticsearch Serviceなどのサービスに実際に触れることができたのが、非常に有意義でした。自分の担当する案件でも、これらの新しいサービスを活用していこうと思いました。
まとめ
半日の短期間の割に、かなり盛りだくさんの内容のブートキャンプでした。このブートキャンプを受講することで、様々なAWSのサービスを実際に触ってみることができる。さらに、それらを組み合わせて、データレイクという切り口でソリューションを構成できる、そんな内容のブートキャンプになっていたかと思います。
普段データ分析環境を利用されている方で、AWSの新しいサービスに取り組んでみたいと考えていらっしゃる方、データレイクの構築に関心がある方には最適な内容だと思いました。AWS公式トレーニングでの開催は未定とのことなので、気になる方はAWS トレーニングと認定ページをウォッチしてみてください!